// 单例模式
// 总结：类只有一个实例，一些属性的设置或者方法（有对类进行改动）都由第一个实例决定，此后创建的实例也是“复刻”实例一。
class Singleton {
  constructor() {
    if (Singleton.instance) {
      return Singleton.instance;  //此后如果再创建实例，函数会直接返回这个已存在的实例，而不是创建一个新的实例。
    }
    // 将第一次创建的实例（通过 this 关键字引用）赋值给 Singleton.instance。
    // 这样，后续尝试创建 Singleton 类的实例时，都会返回这个已经设置好的实例。
    Singleton.instance = this;  //
    // 初始化代码
    this.value = Number(Math.random() * 100).toFixed(2);
  }

  getValue() {
    return this.value;
  }
  fly() {
    console.log("I can fly", this.value);
  }
}
//   为了使这个模式完整工作，
//   你还需要在 Singleton 类中添加一个静态属性 instance 来存储唯一的实例。
//   通常，这个属性会在类定义之外或者在类的静态方法中初始化
// 在类外部初始化静态属性
Singleton.instance = null;
const singleton1 = new Singleton();
const singleton2 = new Singleton();

console.log(singleton1 === singleton2); // true
console.log(singleton1.getValue()); // 随机值
console.log(singleton2.getValue()); // 与 singleton1 相同的随机值
singleton1.run=function (){
    console.log("I can run");
    
}
singleton1.run();
singleton2.run();  //在实例1上创建的方法，在实例2（本质就是实例1-最先创建的实例）中也可以使用
